<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>数据类型</title>
  <script>
    {
      let num;//在声明变量的时候不会知道他具体是什么数据类型
      num = 10;//JS的变量的数据类型是只有程序在运行过程中，根据等号右边的值来决定的
      let name = '张三';//当等号右边的赋值为字符串时，数据类型也被定为字符串
      //已经声明并赋值过的变量的数据类型也可以更改，并赋值不同数据类型的值
      let age = 12;//之前是int类型的数据
      age = '十二';//同一个变量赋值成字符串数据类型依然可以
    }

    {
      //数字型数据类型
      let num = 12;//整形属于数字型
      let num2 = 3.14;//（浮点型）小数属于数字型
      //关于数字型的进制
      let num3 = 12;//经常使用的十进制的数字直接赋值即可使用
      console.log(num3);
      let num4 = 0o10;//使用0o作为前缀的是八进制的数字
      console.log(num4);//无论赋值的时候使用何种的进制，最后输出的时候都会转换成十进制进行输出
      let num5 = 0x12;//以0x前缀的是十六进制的数字
      console.log(num5);
    }

    {
      //最大值和最小值
      console.log(Number.MAX_VALUE);//最大值
      console.log(Number.MIN_VALUE);//最小值
    }

    {
        //数字类型的三个特殊值
        console.log(Infinity);//无穷大
        console.log(-Infinity);//无穷小
        console.log(NaN);//Not a Number 表示不是一个数字型数据类型
    }

    {
        //判断一个值是否为数字型数据类型的方法
        console.log(isNaN(12));//如果传入的值是一个数字型数据，则返回false
        console.log(isNaN('Hallo，Word'));//如果传入的值不是一个数字型数据，则返回true
    }

    //String字符串数据类型
    {
        let str = '这是一个字符串';
        let str2 = "双引号也可以表示字符串，但是还是建议使用单引号";
        let str3 = '如果需要字符串嵌套，可以使用“单双双单，或者双单单双”的方式进行字符串的嵌套';
    }
    {
        //字符串的转义字符
        let str = '如果你需要换行\n则可以使用转义字符实现';
    }
    {
        //使用length()方法检测字符串的长度
        let str = '你好世界';
        console.log(str.length);//返回字符串的长度
    }
    {
        //字符串的拼接
        console.log('你好' + '世界');//返回两个字符串拼接后的结果
        let str = '你好';
        let str1 = '世界';
        console.log(str + str1);//返回两个字符串变量拼接后的结果
        //拼接变量的意义在于当变量内的值发生改变的时候不需要修改语句就可以修改输出结果
        //当加号的两边是数值时表示运算，当加号的一边存在字符串时，最终输出的结果都是字符串
        console.log(12+12);//返回运算后的结果
        console.log(12 + '12');//返回字符串拼接后的结果
    }

    {//弹出一个输入框，并将用户输入的年龄拼接字符串显示出来
        let age = prompt('请输入年龄：');
        alert('您的年龄是：' + age + '岁！');
    }

    {
        //boolean，布尔数据类型
        let bo = false;
        let bo1 = true;
        //布尔数据类型的值只有真或假，在运算时，false表示0，true表示1
    }

    {
        //undefined,表示变量声明但是没有赋值时候的值
        let un ;
        console.log(un);//此时输出的值就是undefined
    }

    {
        //null，空值
        //当声明一个变量并赋空值的时候的值
        let n = null;
        console.log(n);
        //当空值进行计算的时候会当作无进行处理
    }

    {
        //获取变量数据类型的方法 typeof()方法
        let num = 1;
        console.log(typeof num);//将会返回数据类型
        let n = null;
        console.log(typeof n);//返回object复杂数据类型;
    }

    {
        //数据类型的转换
        //数字型转换成字符串类型的三种方法
        let num = 1;
        console.log(num.toString());//使用方法进行转换
        console.log(String(num));//进行强制转换
        console.log(num + '');//通过加号进行字符串拼接转换，也成为隐式转换
    }

    {
        //重要的是如何将其他数据类型转换成数字型
        let str = '12';
        console.log(parseInt(str));//将字符串转换成数值型
        //这个方法只能取整数，如果是个浮点型则会将小数点后面的数值直接去掉，只留下整数部分的数字，不会有四舍五入的情况存在
        //这个方法可以去掉数字后面的字母
        console.log(parseInt('120px'));//如果数字后面带有字母则会自动的将字母去除只留下数字部分
        console.log(parseInt('das120px'));//但是如果数字的前面有字母则不会识别字符，返回NaN
        console.log(parseFloat(str));//将字符串转换成浮点型
        console.log(str - 0);//通过减法运算法则的方式将字符串转换成数字型，也属于隐式转换
        //两个方法的基本功能和特性也基本相同
    }

    {
        //关于数值型转换和计算的案例，弹出一个输入框，用户输入自己的出生年份后计算出用户的年龄
        let age = prompt('请输入您的出生年份');//提示弹出输入框
        let time = 2022 - age;//用年份减去用户的出生年份得出用户的年龄，并由于减法运算自动转换数据类型所以此处不用担心数据类型的转换
        alert('您的年龄是' + time + '岁');//用弹窗显示最终的结果
    }

    {
        //简单的加法计算器的功能
        let num1 = prompt('请输入第一个数字');
        let num2 = prompt('请输入第二个数字');
        //将字符串转换成数字型并进行计算
        // let con = num1 + num2;//在弹出输入框的见面加一个“+”号使输入的内容变成数字型
        // let con = num1 + num2 - 0;//使用算术运算符的方式进行隐式转换
        let con = parseInt(num1) + parseInt(num2);//使用方法将字符串转换成数字类型
        alert(con);
    }

    {
        //将其他数据类型转换成boolean数据类型，使用方法Boolean()
        let num = 0;
        let b = Boolean(num);//传入需要更改数据类型的参数
        console.log(b);//此时的数据类型就变成了Boolean数据类型
        //只有表示空，或者否定的值才会被转换成false，其余的都会转换成true
        console.log(Boolean(''));//false
        console.log(Boolean(0));//false
        console.log(Boolean(NaN));//false
        console.log(Boolean(null));//false
        console.log(Boolean(undefined));//false
        console.log(Boolean(12));//true
    }

    {
        
    }
  </script>
</head>
<body>

</body>
</html>